<?php namespace App\Repositories\Order;

use App\Repositories\Eloquent\Order\Entity\PayParams;

interface OrderRepositoryInterface
{
    /**
     * 获取订单详情
     *
     * @param $id
     *
     * @return \Illuminate\Database\Eloquent\Collection|\App\Models\ItemOrder|\App\Models\ItemOrder[]
     */
    public function show($id);

    /**
     * 查询消息，如果查询不到，这抛出异常
     *
     * @param $id
     *
     * @return \Illuminate\Database\Eloquent\Collection|\App\Models\ItemOrder|\App\Models\ItemOrder[]
     * @throws \App\Exceptions\Item\OrderException
     */
    public function showWithThrow($id);

    /**
     * 通过订单编号获取订单
     *
     * @param $trade_no
     *
     * @return \App\Models\ItemOrder
     */
    public function showByTradeNo($trade_no);

    /**
     * 创建订单
     *
     * @param PayParams $pay
     *
     * @return \App\Models\ItemOrder
     */
    public function create(PayParams $pay);

    /**
     * 用户用户订单列表
     *
     * @param $user_id
     *
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     */
    public function userOrders($user_id, $per_page);

    /**
     * 发布者订单列表
     *
     * @param $publisher_uid
     *
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     */
    public function publisherOrders($publisher_uid, $per_page);

    /**
     * 创建订单申诉
     *
     * @param $id
     * @param $content
     *
     * @return \App\Models\ItemOrderAppeal
     */
    public function storeOrderAppeal($id, $content);

    /**
     * 订单的申诉记录
     *
     * @param $order_id
     *
     * @return \Illuminate\Database\Eloquent\Model|null|static
     */
    public function orderAppeal($order_id);

    /**
     * 用户订单留言
     *
     * @param $id
     * @param $content
     *
     * @return \App\Models\ItemOrderMessage
     */
    public function storeUserMessage($id, $content);

    /**
     * 获取用户订单留言
     *
     * @param $order_id
     *
     * @return \Illuminate\Database\Eloquent\Model|null|static
     */
    public function orderMessage($order_id);

    /**
     * 是否购买了该信息
     *
     * @param $user_id
     * @param $item_id
     *
     * @return bool
     */
    public function isPaidItem($user_id, $item_id);

    /**
     * 支付成功
     *
     * @param $order
     * @param $pay_order_id
     * @param $end_time
     *
     * @return bool
     */
    public function paySuccess($order, $pay_order_id, $end_time);

    /**
     * 支付失败
     *
     * @param $order
     * @param $out_trade_no
     * @param $end_time
     *
     * @return bool
     */
    public function payFailure($order, $out_trade_no, $end_time);
}
